<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class DetallesReservaEventos extends CI_Controller {

    public function __construct() {
        parent::__construct();
        session_start();
        $this->estaLogueado();
        $this->load->model('reservaM');
        $this->validarReservaPost();
    }

    public function index() {
        
    }

    public function hacerChekin() {
        $this->load->model('cliente_x_reservaM');
        $datosReserva = $this->reservaM->obtenerDatos("fecha_ingreso,numero_personas", $_POST["idReserva"]);
        $fechaIngreso = $datosReserva[0]->fecha_ingreso;
        $hoy = date("Y-m-d");
        $cantidadHuespedes = $this->cliente_x_reservaM->contarHuespedes($_POST["idReserva"]);
        $cantidadHuespedes = $cantidadHuespedes[0]->cantidad;
        if ($fechaIngreso <= $hoy) {
            if ($cantidadHuespedes == $datosReserva[0]->numero_personas) {
                $this->reservaM->hacerCheckin($_POST["idReserva"], $_SESSION["usuario"]["id_usuario"]);
                $_SESSION["mensaje"]["contenido"] = "Check-in realizado exitosamente";
                $_SESSION["mensaje"]["tipo"] = "exito";
                header("location:reserva?id={$_POST['idReserva']}");
            } else {
                $huspedesFaltantes = $datosReserva[0]->numero_personas - $cantidadHuespedes;
                if ($huspedesFaltantes > 0) {
                    if ($huspedesFaltantes == 1)
                        $mens = "el húesped faltante.";
                    else {
                        $mens = "los $huspedesFaltantes huéspedes faltantes.";
                    }
                    $_SESSION["mensaje"]["contenido"] = "Check-in realizado exitosamente, no olvide registrar $mens";
                    $this->reservaM->hacerCheckin($_POST["idReserva"], $_SESSION["usuario"]["id_usuario"]);
                    $_SESSION["mensaje"]["tipo"] = "informativa";
                } else if ($huspedesFaltantes < 0) {
                    $huspedesFaltantes = $huspedesFaltantes * -1;
                    $_SESSION["mensaje"]["contenido"] = "Existen $huspedesFaltantes huéspedes adicioanles. Por favor verifiqe el número de persnas de la reserva";
                    $_SESSION["mensaje"]["tipo"] = "advertencia";
                }
                header("location:reserva?id={$_POST['idReserva']}");
            }
        } else {
            $_SESSION["mensaje"]["contenido"] = "La fecha de ingreso no es igual ni posterior a la fecha actual.";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function deshacerCheckin() {
        $this->reservaM->deshacerCheckin($_POST["idReserva"]);
        $_SESSION["mensaje"]["contenido"] = "El check-in se deshizo exitosamente";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:reserva?id={$_POST['idReserva']}");
    }

    public function hacerChekout() {
        $this->load->model('tarifa_x_diaM');
        $this->load->model('venta_producto_servicioM');
        $this->load->model('establecimientoM');
        $this->load->model('ajusteM');
        $this->load->model('ingreso_reservaM');
        $this->load->model('venta_producto_serviciom');

        $idReserva = $_POST["idReserva"];
        //Costos Totales
        $hospedaje = $this->tarifa_x_diaM->obtenerCostosHospedaje($idReserva);
        $hospedaje = $hospedaje[0]->totalHospedaje;
        $impuestoHospedaje = $this->reservaM->obtenerDatos("impuesto", $idReserva);
        $impuestoHospedaje = $impuestoHospedaje[0]->impuesto;
        $consumos = $this->venta_producto_servicioM->obtenerVentas($idReserva);
        $consumoSubTotal = 0;
        $impuestosConsumo = 0;
        foreach ($consumos as $row) {
            $consumoSubTotal = $consumoSubTotal + $row->total_venta;
            $impuestosConsumo = $impuestosConsumo + $row->impuesto;
        }
        $consumoTotal = $consumoSubTotal + $impuestosConsumo;
        $seguroHotelero = 0;
        $data["seguroHotelero"] = $this->establecimientoM->obtenerDatos("tiene_seguro_hotelero, seguro_hotelero", $_SESSION["establecimiento"]["id_establecimiento"]);
        if ($data["seguroHotelero"][0]->tiene_seguro_hotelero == 1) {
            $seguroHotelero = $data["seguroHotelero"][0]->seguro_hotelero;
        }


        //Ajustes
        $ajustes = $this->ajusteM->obtenerAjustes($idReserva);
        $ajustes = $ajustes[0]->totalAjuste;


        //Ingresos
        $ingresos = $this->ingreso_reservaM->obtenerIngresos($idReserva);
        $ingresos = $ingresos[0]->totalIngreso;

        $totalReserva = $hospedaje + $impuestoHospedaje + $consumoTotal + $seguroHotelero + $ajustes;
        $totalAlojamiento = $hospedaje + $impuestoHospedaje;
        $this->venta_producto_serviciom->actualizarConsumosCheckout($idReserva);
        if ($totalReserva - $ingresos == 0) {
            $this->reservaM->hacerCheckout($idReserva, $_SESSION["usuario"]["id_usuario"]);
            $_SESSION["mensaje"]["contenido"] = "Check-out realizado exitosamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $this->reservaM->hacerCheckout($idReserva, $_SESSION["usuario"]["id_usuario"]);
            $_SESSION["mensaje"]["contenido"] = "Se realizo el check out exitosamente
            pero quedaron cuentas pendientes, recuerde resvisarla en el reporte de <a href='cuentasporcobrar'> cuentas por cobrar</a>";
            $_SESSION["mensaje"]["tipo"] = "informativa";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function deshacerCheckout() {
        $this->load->model('venta_producto_serviciom');
        $this->reservaM->deshacerCheckout($_POST["idReserva"]);
        $this->venta_producto_serviciom->actualizarConsumosDeshacerCheckout($_POST["idReserva"]);
        $_SESSION["mensaje"]["contenido"] = "El check-out se deshizo exitosamente";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:reserva?id={$_POST['idReserva']}");
    }

    public function cancelarReserva() {
        $idReserva = $_POST["idReserva"];
        $this->reservaM->eliminarReserva($idReserva, $_SESSION["usuario"]["id_usuario"]);
        $_SESSION["mensaje"]["contenido"] = "Reserva cancelada exitosamente";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:calendario");
    }

    public function registrarPagoReserva() {
        $this->load->model('ingreso_reservaM');
        $this->escapar($_POST);
        if ($_POST["valorPago"] != 0) {
            $this->ingreso_reservaM->registrarPago($_POST["valorPago"], $_POST["descripcionPago"], $_POST["modoPago"], $_POST["idReserva"], $_SESSION["usuario"]["id_usuario"]);
            $this->reservaM->actualizarIngreso($_POST["valorPago"], $_POST["idReserva"]);
            $this->reservaM->setConfirmada($_POST["idReserva"]);
            $this->reservaM->actualizarEstatus($_POST["idReserva"]);
            if ($_POST["modoPago"] == "efectivo") {
                $this->addCaja($_POST["valorPago"]);
            }
            $_SESSION["mensaje"]["contenido"] = "El pago se registro correctamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $_SESSION["mensaje"]["contenido"] = "No se pude registrar un pago de " . $_SESSION["establecimiento"]["moneda"] . "0";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function eliminarPagoReserva() {
        $this->load->model('ingreso_reservaM');
        $this->load->model('reservaM');

        if (!empty($_POST["idPago"]) && $this->esMiPago($_POST["idPago"])) {
            $valorPago = $this->ingreso_reservaM->obtenerIngreso($_POST["idPago"]);
            $valorPago = $valorPago[0]->valor;
            $this->ingreso_reservaM->eliminarPago($_POST["idPago"]);
            $idReserva = $_POST["idReserva"];
            $this->lessCaja($valorPago);
            $valorPago = $valorPago * (-1);
            $this->reservaM->actualizarIngreso($valorPago, $_POST["idReserva"]);
            $this->reservaM->actualizarEstatus($_POST["idReserva"]);
            $_SESSION["mensaje"]["contenido"] = "El pago se eliminó correctamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $_SESSION["mensaje"]["contenido"] = "Error en la operación";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function crearAjusteTotal() {
        $this->load->model('ajusteM');
        $this->escapar($_POST);
        $this->ajusteM->crearAjuste($_POST["valorAjusteTotal"], $_POST["descripcionAjusteTotal"], $_POST["idReserva"], $_SESSION["usuario"]["id_usuario"], 'total');
        $this->reservaM->actualizarTotalPagar($_POST["valorAjusteTotal"], $_POST["idReserva"]);
        $this->reservaM->actualizarEstatus($_POST["idReserva"]);
        $_SESSION["mensaje"]["contenido"] = "El ajuste se creó exitosamente";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:reserva?id={$_POST['idReserva']}");
    }

    public function crearAjusteAlojamiento() {
        $this->load->model('ajusteM');
        $this->load->model('reservaM');
        $this->load->model('impuestoM');

        $this->escapar($_POST);
        if ($_POST["valorAjusteAlojamiento"] > $_POST["valorPendiente"]) {
            $this->mensaje("El descuento no puede ser mayor al valor pendiente", "advertencia", "reserva?id={$_POST['idReserva']}");
        }
        $_POST["valorAjusteAlojamiento"] = $_POST["valorAjusteAlojamiento"] * -1;
        $this->ajusteM->crearAjuste($_POST["valorAjusteAlojamiento"], $_POST["descripcionAjusteAlojamiento"], $_POST["idReserva"], $_SESSION["usuario"]["id_usuario"], 'alojamiento');

        $idReserva = $_POST["idReserva"];
        $this->reservaM->quitarTotalHospedaje($idReserva);
        $valorTotalHospedaje = $this->reservaM->obtenerDatos("total_alojamiento", $idReserva);
        $valorTotalHospedaje = $valorTotalHospedaje[0]->total_alojamiento + $_POST["valorAjusteAlojamiento"];
        $this->reservaM->actualizarTotalHospedaje($valorTotalHospedaje, $idReserva);


        $impuestosPorAlojamiento = $this->reservaM->obtenerDatos("impuesto", $idReserva);
        $impuestosPorAlojamiento = $impuestosPorAlojamiento[0]->impuesto;
        if ($impuestosPorAlojamiento != 0) {
            $impuesto = $this->impuestoM->obtenerImpuestos($_SESSION["establecimiento"]["id_establecimiento"]);
            $valorImpuesto = $valorTotalHospedaje * $impuesto[0]->valor / 100;
            $valorTotalHospedaje = $valorTotalHospedaje + $valorImpuesto;
            $this->reservaM->actulizarImpuesto($valorImpuesto, $idReserva);
        }
        $idReserva = $_POST["idReserva"];
        $this->reservaM->actualizarTotalPagar($valorTotalHospedaje, $idReserva);
        $this->reservaM->actualizarEstatus($_POST["idReserva"]);
        $_SESSION["mensaje"]["contenido"] = "El ajuste se creó exitosamente";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:reserva?id={$_POST['idReserva']}");
    }

    public function eliminarAjusteTotal() {
        var_dump($_POST);
        $this->load->model('ajusteM');
        $this->load->model('reservaM');

        if (!empty($_POST["idAjuste"]) && $this->esMiAjuste($_POST["idAjuste"])) {
            $valorAjusteTotal = $this->ajusteM->obtenerAjuste($_POST["idAjuste"]);
            $valorAjusteTotal = $valorAjusteTotal[0]->valor;
            $this->ajusteM->eliminarAjuste($_POST["idAjuste"]);
            $idReserva = $_POST["idReserva"];
            $valorAjusteTotal = $valorAjusteTotal * (-1);
            $this->reservaM->actualizarTotalPagar($valorAjusteTotal, $_POST["idReserva"]);
            $this->reservaM->actualizarEstatus($_POST["idReserva"]);
            $_SESSION["mensaje"]["contenido"] = "El ajuste se eliminó exitosamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $_SESSION["mensaje"]["contenido"] = "Error en la operación";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function eliminarAjusteAlojamiento() {
        $this->load->model('ajusteM');
        $this->load->model('reservaM');
        $this->load->model('impuestom');

        if (!empty($_POST["idAjuste"]) && $this->esMiAjuste($_POST["idAjuste"])) {
            $valorAjusteAlojamiento = $this->ajusteM->obtenerAjuste($_POST["idAjuste"]);
            $valorAjusteAlojamiento = $valorAjusteAlojamiento[0]->valor;
            $this->ajusteM->eliminarAjuste($_POST["idAjuste"]);
            $idReserva = $_POST["idReserva"];
            $this->reservaM->quitarTotalHospedaje($idReserva);
            $valorTotalHospedaje = $this->reservaM->obtenerDatos("total_alojamiento", $idReserva);
            $valorTotalHospedaje = $valorTotalHospedaje[0]->total_alojamiento - $valorAjusteAlojamiento;
            $this->reservaM->actualizarTotalHospedaje($valorTotalHospedaje, $idReserva);


            $impuestosPorAlojamiento = $this->reservaM->obtenerDatos("impuesto", $idReserva);
            $impuestosPorAlojamiento = $impuestosPorAlojamiento[0]->impuesto;
            if ($impuestosPorAlojamiento != 0) {
                $impuesto = $this->impuestom->obtenerImpuestos($_SESSION["establecimiento"]["id_establecimiento"]);
                $valorImpuesto = $valorTotalHospedaje * $impuesto[0]->valor / 100;
                $valorTotalHospedaje = $valorTotalHospedaje + $valorImpuesto;
                $this->reservaM->actulizarImpuesto($valorImpuesto, $idReserva);
            }
            $idReserva = $_POST["idReserva"];
            $this->reservaM->actualizarTotalPagar($valorTotalHospedaje, $idReserva);
            $this->reservaM->actualizarEstatus($_POST["idReserva"]);
            $_SESSION["mensaje"]["contenido"] = "El ajuste se eliminó exitosamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function crearConsumoReserva() {
        $this->load->model('producto_x_ventaM');
        $this->load->model('clienteM');
        $this->load->model('producto_servicioM');
        $this->load->model('venta_producto_servicioM');
        $this->load->model('categoria_producto_servicioM');
        $this->escapar($_POST);
        $flag = false;
        if (!empty($_POST["cliente"])) {
            $idEstablecimiento = $_SESSION["establecimiento"]["id_establecimiento"];
            $usuario = $_SESSION["usuario"]["id_usuario"];
            $esMiCliente = $this->clienteM->esMiCliente($_POST["cliente"], $idEstablecimiento);

            if ($esMiCliente[0]->cantidad == 1) {
                $impuesto = $_POST["total"] + $_POST["descuento"] - $_POST["subtotal"];
                $_POST["total"] = $_POST["total"] - $impuesto;
                $this->venta_producto_servicioM->insertarVenta($_POST["idReserva"], $_POST["cliente"], $impuesto, $_POST["descuento"], $_POST["total"], $usuario, "", $_POST["nota"]);
                $pagar = $impuesto + $_POST["total"];
                $idVentaServicio = mysql_insert_id();
                $this->reservaM->actualizarTotalPagar($pagar, $_POST["idReserva"]);
                $this->producto_x_ventaM->insertarRegistro($_SESSION["establecimiento"]["id_establecimiento"], $_POST["productoServicio"], $idVentaServicio, $_POST["cantidad"]);
                $tieneInventario = $this->categoria_producto_servicioM->tieneInventario($_POST["categoria"]);
                if ($tieneInventario[0]->cantidad == 1) {
                    $this->producto_servicioM->actualizarInventario($_POST["productoServicio"], $_POST["cantidad"]);
                }
                $this->reservaM->actualizarEstatus($_POST["idReserva"]);
                $flag = true;
            }
        }

        if ($flag) {
            $_SESSION["mensaje"]["contenido"] = "El consumo se creó exitosamente.";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente.";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function crearCargoExtraReserva() {
        $this->load->model('clienteM');
        $this->load->model('venta_producto_servicioM');
        $this->load->model('producto_x_ventaM');
        $this->load->model('reservaM');

        if (empty($_POST["idReserva"]) || empty($_POST["cliente"]) || empty($_POST["valor"])) {
            $this->mensaje("Datos inválidos, intentalo nuevamente", "advertencia", "reserva?id={$_POST['idReserva']}");
        }
        $idEstablecimiento = $_SESSION["establecimiento"]["id_establecimiento"];
        $usuario = $_SESSION["usuario"]["id_usuario"];
        $esMiCliente = $this->clienteM->esMiCliente($_POST["cliente"], $idEstablecimiento);
        if ($esMiCliente[0]->cantidad == 1) {
            $impuesto = 0;
            $this->venta_producto_servicioM->insertarVenta($_POST["idReserva"], $_POST["cliente"], $impuesto, "0", $_POST["valor"], $usuario, "", $_POST["descripcion"]);
            $idVentaServicio = mysql_insert_id();
            $this->reservaM->actualizarTotalPagar($_POST["valor"], $_POST["idReserva"]);
            $this->reservaM->actualizarEstatus($_POST["idReserva"]);
        }
        $this->mensaje("Cargo extra creado correctamente", "exito", "reserva?id={$_POST['idReserva']}");
    }

    public function eliminarConsumoReserva() {
        $this->load->model('producto_x_ventaM');
        $this->load->model('producto_servicioM');
        $this->load->model('categoria_producto_servicioM');
        $this->load->model('venta_producto_servicioM');
        $this->escapar($_POST);
        $flag = false;
        $idEstablecimiento = $_SESSION["establecimiento"]["id_establecimiento"];
        if (!empty($_POST["idReserva"]) && !empty($_POST["idVentaServicio"]) && !empty($_POST["idCategoriaProducto"]) && !empty($_POST["idServicio"])) {
            $tieneInventario = $this->categoria_producto_servicioM->tieneInventario($_POST["idCategoriaProducto"]);
            if ($tieneInventario[0]->cantidad == 1) {
                $cantidad = $this->producto_x_ventaM->obtenerDatos("cantidad", $_POST["idServicio"], $_POST["idVentaServicio"]);
                $cantidad = $cantidad[0]->cantidad * -1;
                $this->producto_servicioM->actualizarInventario($_POST["idServicio"], $cantidad);
            }
            $valorVenta = $this->venta_producto_servicioM->obtenerDatos("total_venta,impuesto", $_POST["idVentaServicio"]);
            $valorVenta = $valorVenta[0]->total_venta + $valorVenta[0]->impuesto;

            $this->reservaM->descontarVenta($valorVenta, $_POST["idReserva"]);
            $this->venta_producto_servicioM->eliminarVenta($_POST["idVentaServicio"], $idEstablecimiento);
            $flag = true;
        } else if (!empty($_POST["idReserva"]) && !empty($_POST["idVentaServicio"]) && empty($_POST["idCategoriaProducto"]) && empty($_POST["idServicio"])) {
            $valorVenta = $this->venta_producto_servicioM->obtenerDatos("total_venta", $_POST["idVentaServicio"]);
            $valorVenta = $valorVenta[0]->total_venta;
            $this->reservaM->descontarVenta($valorVenta, $_POST["idReserva"]);
            $this->venta_producto_servicioM->eliminarVenta($_POST["idVentaServicio"], $idEstablecimiento);
            $flag = true;
        }
        $this->reservaM->actualizarEstatus($_POST["idReserva"]);

        if ($flag) {
            $_SESSION["mensaje"]["contenido"] = "El consumo se eliminó exitosamente.";
            $_SESSION["mensaje"]["tipo"] = "exito";
            header("location:reserva?id={$_POST['idReserva']}");
        } else {
            $_SESSION["mensaje"]["contenido"] = "El consumo no se pudo eliminar.";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
        }
    }

    public function crearHuesped() {
        $this->load->model('clienteM');
        $this->load->model('cliente_x_reservaM');
        $this->load->model('paisM');
        $this->load->model('procedencia_destinoM');

        $this->escapar($_POST);
        $idCliente;
        $this->formatoFechaBD($_POST['fechaNacimiento']);
        if ($_POST['idCliente'] == '') {
            $this->verificarCantidadHuespedes($_POST['idReserva']);
            $cliente = $this->clienteM->cargarCliente($_POST['documento'], $_POST['nacionalidad'], 1);
            if (sizeof($cliente) == 0) {
                $this->clienteM->crearClientePersona($_POST['documento'], $_POST['nacionalidad'], $_POST['tipoDocumento'], $_POST['nombre'], $_POST['primerApellido'], $_POST['segundoApellido'], '', $_POST['fechaNacimiento'], $_POST['telefono'], $_POST['email'], $_POST['ocupacion'], $_POST['direccion']);
                $idCliente = mysql_insert_id();
                $this->cliente_x_reservaM->registrarClinteEnReserva($_POST['idReserva'], $idCliente);
                $this->procedencia_destinoM->insertarRegistro($_POST['idReserva'], $idCliente, $_POST['paisProcedencia'], $_POST['paisDestino'], $_POST['ciudadProcedencia'], $_POST['ciudadDestino']);
                $_SESSION["mensaje"]["contenido"] = "Huesped creado exitosamente.";
                $_SESSION["mensaje"]["tipo"] = "exito";
            } else {
                $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamnete";
                $_SESSION["mensaje"]["tipo"] = "advertencia";
            }
        } else {
            $idCliente = $_POST['idCliente'];
            $this->clienteM->actualizarClientePersona($_POST['idCliente'], $_POST['documento'], $_POST['nacionalidad'], $_POST['tipoDocumento'], $_POST['nombre'], $_POST['primerApellido'], $_POST['segundoApellido'], '', $_POST['fechaNacimiento'], $_POST['telefono'], $_POST['email'], $_POST['ocupacion'], $_POST['direccion']);
            $existe = $this->cliente_x_reservaM->existeClienteEnReserva($_POST['idReserva'], $idCliente);

            if ($existe[0]->cantidad == 0) {
                $this->verificarCantidadHuespedes($_POST['idReserva']);
                $this->cliente_x_reservaM->registrarClinteEnReserva($_POST['idReserva'], $idCliente);
                $this->procedencia_destinoM->insertarRegistro($_POST['idReserva'], $idCliente, $_POST['paisProcedencia'], $_POST['paisDestino'], $_POST['ciudadProcedencia'], $_POST['ciudadDestino']);
                $_SESSION["mensaje"]["contenido"] = "Huesped creado exitosamente.";
                $_SESSION["mensaje"]["tipo"] = "exito";
            } else {
                $this->procedencia_destinoM->actualizarRegistro($_POST['idReserva'], $idCliente, $_POST['paisProcedencia'], $_POST['paisDestino'], $_POST['ciudadProcedencia'], $_POST['ciudadDestino']);
                $_SESSION["mensaje"]["contenido"] = " {$_POST['nombre']} {$_POST['primerApellido']} {$_POST['segundoApellido']} ya esta registrado en esta reserva";
                $_SESSION["mensaje"]["tipo"] = "advertencia";
            }
        }
        header("location:../reserva?id={$_POST['idReserva']}");
    }

    public function editarHuesped() {
        $this->load->model('clienteM');
        $this->load->model('procedencia_destinoM');
        $this->load->model('paisM');
        $this->escapar($_POST);
        $esMiCliente = $this->clienteM->esMiCliente($_POST["idCliente"], $_SESSION["establecimiento"]["id_establecimiento"]);
        if ($esMiCliente[0]->cantidad == 1) {
            $nacionalidad = $_POST["nacionalidadCliente"];
            $identificacion = $_POST["identificacionCliente"];

            if ($_POST['fechaNacimiento'] != "") {
                $this->formatoFechaBD($_POST['fechaNacimiento']);
            }
            if ($nacionalidad != "" && $identificacion != "") {
                $cliente = $this->clienteM->cargarCliente($identificacion, $nacionalidad, 1);
                if (sizeof($cliente) == 0 || $cliente[0]->id_cliente == $_POST['idCliente']) {
                    $this->clienteM->actualizarClientePersona($_POST['idCliente'], $_POST['identificacionCliente'], $_POST['nacionalidadCliente'], $_POST['tipoDocumento'], $_POST['nombreCliente'], $_POST['primerApellido'], $_POST['segundoApellido'], '', $_POST['fechaNacimiento'], $_POST['telefono'], $_POST['email'], $_POST['ocupacion'], $_POST['direccion']);
                    $_SESSION["mensaje"]["contenido"] = "Clinte actualizado exitosamente";
                    $_SESSION["mensaje"]["tipo"] = "exito";
                } else {
                    $nacionalidad = $this->paisM->obtenerNombre($nacionalidad);
                    $_SESSION["mensaje"]["contenido"] = "El clinte con el documento: {$identificacion} y de nacionalidad: $nacionalidad ya existe";
                    $_SESSION["mensaje"]["tipo"] = "advertencia";
                }
            } else {
                $this->clienteM->actualizarClientePersona($_POST['idCliente'], $_POST['identificacionCliente'], $_POST['nacionalidadCliente'], $_POST['tipoDocumento'], $_POST['nombreCliente'], $_POST['primerApellido'], $_POST['segundoApellido'], '', $_POST['fechaNacimiento'], $_POST['telefono'], $_POST['email'], $_POST['ocupacion'], $_POST['direccion']);
                $_SESSION["mensaje"]["contenido"] = "Clinte actualizado exitosamente";
                $_SESSION["mensaje"]["tipo"] = "exito";
            }
            if (!empty($_POST["paisProcedencia"]) || !empty($_POST["ciudadProcedencia"]) || !empty($_POST["paisDestino"]) || !empty($_POST["ciudadDestino"])) {
                $existe = $this->procedencia_destinoM->existeCliente($_POST["idReserva"], $_POST["idCliente"]);
                if ($existe[0]->cantidad == 1) {
                    $this->procedencia_destinoM->actualizarregistro($_POST["idReserva"], $_POST["idCliente"], $_POST["paisProcedencia"], $_POST["paisDestino"], $_POST["ciudadProcedencia"], $_POST["ciudadDestino"]);
                } else if ($existe[0]->cantidad == 0) {
                    $this->procedencia_destinoM->insertarRegistro($_POST["idReserva"], $_POST["idCliente"], $_POST["paisProcedencia"], $_POST["paisDestino"], $_POST["ciudadProcedencia"], $_POST["ciudadDestino"]);
                }
            } else {
                $this->procedencia_destinoM->eliminarRegistro($_POST["idReserva"], $_POST["idCliente"]);
            }
        } else {
            $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
        }
        header("location:../reserva?id={$_POST['idReserva']}");
    }

    public function eliminarHuesped() {
        $this->load->model('cliente_x_reservaM');
        $this->load->model('procedencia_destinoM');

        $this->escapar($_POST);
        $this->procedencia_destinoM->eliminarRegistro($_POST["idReserva"], $_POST["idCliente"]);
        $this->cliente_x_reservaM->eliminarClienteDeReserva($_POST["idReserva"], $_POST["idCliente"]);
        $_SESSION["mensaje"]["contenido"] = "Húesped eliminado de esta reserva exitosamente.";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:../reserva?id={$_POST['idReserva']}");
    }

    public function actualizarTitular() {
        $this->load->model('clienteM');
        $this->load->model('reservaM');
        $this->escapar($_POST);
        $idCliente = -1;

        if ($_POST["quien"] == "persona" && !empty($_POST["idCliente"])) {
            $esMiCliente = $this->clienteM->esMiCliente($_POST["idCliente"], $_SESSION["establecimiento"]["id_establecimiento"]);
            if ($esMiCliente[0]->cantidad == 1) {
                $idCliente = $_POST["idCliente"];
            } else {
                $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
                $_SESSION["mensaje"]["tipo"] = "advertencia";
            }
        } else if ($_POST["quien"] == "empresa") {
            if ($_POST['idEmpresa'] == '') {//empresa nueva
                $this->clienteM->crearClienteEmpresa($_POST['identificacionEmpresa'], $_POST['paisEmpresa'], $_POST['nombreEmpresa'], $_POST['telefonoEmpresa'], $_POST['direccionEmpresa'], $_POST['emailEmpresa']);
                $idCliente = mysql_insert_id();
            } else {//empresa vieja
                $esMiCliente = $this->clienteM->esMiCliente($_POST["idEmpresa"], $_SESSION["establecimiento"]["id_establecimiento"]);
                if ($esMiCliente[0]->cantidad == 1) {
                    $idCliente = $_POST['idEmpresa'];
                    $this->clienteM->actualizarClienteEmpresa($_POST['idEmpresa'], $_POST['identificacionEmpresa'], $_POST['paisEmpresa'], $_POST['nombreEmpresa'], $_POST['telefonoEmpresa'], $_POST['direccionEmpresa'], $_POST['emailEmpresa']);
                } else {
                    $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
                    $_SESSION["mensaje"]["tipo"] = "advertencia";
                }
            }
        } else if ($_POST["quien"] == "otraPersona") {
            if ($_POST['fechaNacimiento'] != "") {
                $this->formatoFechaBD($_POST['fechaNacimiento']);
            }
            if ($_POST['idClienteOtraPersona'] == '') {
                $cliente = $this->clienteM->cargarCliente($_POST['documento'], $_POST['nacionalidad'], 1);
                if (sizeof($cliente) == 0) {
                    $this->clienteM->crearClientePersona($_POST['documento'], $_POST['nacionalidad'], $_POST['tipoDocumento'], $_POST['nombre'], $_POST['primerApellido'], $_POST['segundoApellido'], '', $_POST['fechaNacimiento'], $_POST['telefono'], $_POST['email'], $_POST['ocupacion'], $_POST['direccion']);
                    $idCliente = mysql_insert_id();
                    $_SESSION["mensaje"]["contenido"] = "Huesped creado exitosamente.";
                    $_SESSION["mensaje"]["tipo"] = "exito";
                } else {
                    $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamnete";
                    $_SESSION["mensaje"]["tipo"] = "advertencia";
                }
            } else {

                $esMiCliente = $this->clienteM->esMiCliente($_POST['idClienteOtraPersona'], $_SESSION["establecimiento"]["id_establecimiento"]);
                if ($esMiCliente[0]->cantidad == 1) {
                    $idCliente = $_POST['idClienteOtraPersona'];
                    $this->clienteM->actualizarClientePersona($_POST['idClienteOtraPersona'], $_POST['documento'], $_POST['nacionalidad'], $_POST['tipoDocumento'], $_POST['nombre'], $_POST['primerApellido'], $_POST['segundoApellido'], '', $_POST['fechaNacimiento'], $_POST['telefono'], $_POST['email'], $_POST['ocupacion'], $_POST['direccion']);
                    $_SESSION["mensaje"]["contenido"] = "Huesped creado exitosamente.";
                    $_SESSION["mensaje"]["tipo"] = "exito";
                } else {
                    $_SESSION["mensaje"]["contenido"] = "Intetalo nuevamente";
                    $_SESSION["mensaje"]["tipo"] = "advertencia";
                }
            }
        } else {
            $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
        }

        if ($idCliente != -1) {
            $this->reservaM->atualizarQuienPaga($idCliente, $_POST["idReserva"]);
            $_SESSION["mensaje"]["contenido"] = "Titular actualizado exitosamente";
            $_SESSION["mensaje"]["tipo"] = "exito";
        }

        header("location:reserva?id={$_POST['idReserva']}");
    }

    public function guardarNota() {
        $this->load->model('reservaM');

        $this->escapar($_POST);
        if (isset($_POST["nota"])) {
            $this->reservaM->guardarNota($_POST["nota"], $_POST["idReserva"]);
            $_SESSION["mensaje"]["contenido"] = "La nota se guardó correctamente.";
            $_SESSION["mensaje"]["tipo"] = "exito";
        } else {
            $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
        }
        header("location:../reserva?id={$_POST['idReserva']}");
    }

    public function cambiarHabitacion() {
        $this->load->model('reservam');
        $this->load->model('cuartom');
        $this->load->model('periodom');
        $this->load->model('reserva_x_cuartom');
        $this->load->model('tarifa_x_diam');
        $this->load->model('categoriam');
        $this->load->model('categoria_x_temporadam');
        $this->load->model('tarifa_x_personam');
        $this->load->model('ajustem');
        $this->load->model('impuestom');

        $this->escapar($_POST);
        $esMiHabitacion = $this->cuartom->esMiCuarto($_POST["idHabitacion"], $_SESSION["establecimiento"]["id_establecimiento"]);
        if ($esMiHabitacion[0]->cantidad == 1) {
            $reserva = $this->reservam->obtenerDatos("fecha_ingreso, fecha_salida, numero_personas", $_POST["idReserva"]);
            $cantPersNuevaHabi = $this->cuartom->obtenerCapacidad($_POST["idHabitacion"]);
            $cantPersNuevaHabi = $cantPersNuevaHabi[0]->capacidad_estandar + $cantPersNuevaHabi[0]->capacidad_adicional;
            if ($reserva[0]->numero_personas > $cantPersNuevaHabi) {
                $_SESSION["mensaje"]["contenido"] = "La habitación seleccionada no tiene capacidad para {$reserva[0]->numero_personas} huéspedes";
                $_SESSION["mensaje"]["tipo"] = "advertencia";
            } else {
                $this->formatoFechaVista($reserva[0]->fecha_ingreso);
                $this->formatoFechaVista($reserva[0]->fecha_salida);
                $this->validarFechaLegadaSalida($reserva[0]->fecha_ingreso, $reserva[0]->fecha_salida, $_POST["idHabitacion"]);
                $idHabitacionVieja = $this->reserva_x_cuartom->obtenerDatos("id_cuarto", $_POST["idReserva"]);
                $this->formatoFechaBD($reserva[0]->fecha_ingreso);
                $this->formatoFechaBD($reserva[0]->fecha_salida);
                $this->tarifa_x_diam->eliminarRegistros($_POST["idReserva"], $idHabitacionVieja[0]->id_cuarto);

                $this->reserva_x_cuartom->atualizarHabitacion($_POST["idHabitacion"], $_POST["idReserva"]);

                $this->tarifa_x_dia($reserva[0]->fecha_ingreso, $reserva[0]->fecha_salida, $_POST["idReserva"], $reserva[0]->numero_personas, $_POST["idHabitacion"]);
                $this->reservaM->actualizarEstatus($_POST["idReserva"]);
                $_SESSION["mensaje"]["contenido"] = "Cambio de habitación realizado exitosamente";
                $_SESSION["mensaje"]["tipo"] = "exito";
            }
        } else {
            $_SESSION["mensaje"]["contenido"] = "Intentalo nuevamente";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
        }
        header("location:reserva?id={$_POST['idReserva']}");
    }

    private function validarFechaLegadaSalida($desde, $hasta, $idHabitacion) {
        $desde = explode('/', $desde);
        $hasta = explode('/', $hasta);
        $desde = $desde[2] . '-' . $desde[1] . '-' . $desde[0];
        $hasta = $hasta[2] . '-' . $hasta[1] . '-' . $hasta[0];
        $desde2 = strtotime('+1 day', strtotime($desde));
        $desde2 = date('Y-m-j', $desde2);
        $hasta2 = strtotime('-1 day', strtotime($hasta));
        $hasta2 = date('Y-m-j', $hasta2);
        $cantidadReservas = $this->reservam->verificarFechas($desde, $desde2, $hasta, $hasta2, $idHabitacion, $_POST["idReserva"]);
        if ($cantidadReservas[0]->cantidad != 0) {
            $_SESSION["mensaje"]["contenido"] = "Fechas inválidas";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:reserva?id={$_POST['idReserva']}");
            exit();
        }
    }

    private function tarifa_x_dia($desde, $hasta, $idReserva, $cantidadPersonas, $idHabitacion) {
        $idCategoria = $this->cuartom->obtenerDatos('id_categoria', $idHabitacion);
        $idCategoria = $idCategoria[0]->id_categoria; //Categoria de la habitación
        $periodos = $this->periodom->obtenerPeridosPorCategoria($_SESSION["establecimiento"]["id_establecimiento"]); //Obteno los periodos por medios de la categoria
        // var_dump($periodos);
        $impuestosPorAlojamiento = $this->reservam->obtenerDatos("impuesto", $idReserva);
        $impuestosPorAlojamiento = $impuestosPorAlojamiento[0]->impuesto;

        $diferenciaDias = $this->diferenciaFechas($desde, $hasta);
        $this->reservam->quitarTotalHospedaje($idReserva);
        $valorTotalHospedaje = 0;
        for ($i = 0; $i < $diferenciaDias; $i++) {
            $hoy = date("Y-m-d", strtotime("$desde +$i day"));

            $hoyAux = explode("-", $hoy);
            $mesHoyHospedaje = $hoyAux[1];
            $diaHoyHospedaje = $hoyAux[2];
            $precio = 0;
            foreach ($periodos as $row) {
                $fechaInicio = explode("-", $row->fecha_inicio);
                $fechaFin = explode("-", $row->fecha_fin);

                $mesInicioPeriodo = $fechaInicio[0];
                $diaInicioPeriodo = $fechaInicio[1];

                $mesFinPeriodo = $fechaFin[0];
                $diaFinPeriodo = $fechaFin[1];
                if ($mesHoyHospedaje == $mesInicioPeriodo && $diaHoyHospedaje >= $diaInicioPeriodo && $mesHoyHospedaje == $mesFinPeriodo && $diaHoyHospedaje <= $diaFinPeriodo) {
                    $precio = $this->obtenerPrecio($row->id_temporada, $idCategoria, $cantidadPersonas, $hoy);
                } else if ($mesHoyHospedaje > $mesInicioPeriodo && $mesHoyHospedaje < $mesFinPeriodo) {
                    $precio = $this->obtenerPrecio($row->id_temporada, $idCategoria, $cantidadPersonas, $hoy);
                } else if ($mesHoyHospedaje == $mesInicioPeriodo && $diaHoyHospedaje >= $diaInicioPeriodo && $mesHoyHospedaje < $mesFinPeriodo) {
                    $precio = $this->obtenerPrecio($row->id_temporada, $idCategoria, $cantidadPersonas, $hoy);
                } else if ($mesHoyHospedaje == $mesFinPeriodo && $diaHoyHospedaje <= $diaFinPeriodo && $mesHoyHospedaje > $mesInicioPeriodo) {
                    $precio = $this->obtenerPrecio($row->id_temporada, $idCategoria, $cantidadPersonas, $hoy);
                }
            }
            $valorTotalHospedaje = $valorTotalHospedaje + $precio;
            $this->tarifa_x_diam->insertarRegistro($idReserva, $idHabitacion, $hoy, $precio);
        }
        $totalAjusteAlojamiento = $this->ajustem->totalAjusteAlojamiento($idReserva);
        $totalAjusteAlojamiento = $totalAjusteAlojamiento[0]->totalAjuste;
        $valorTotalHospedaje = $valorTotalHospedaje + $totalAjusteAlojamiento;
        $this->reservam->actualizarTotalHospedaje($valorTotalHospedaje, $idReserva);
        if ($impuestosPorAlojamiento != 0) {
            $impuesto = $this->impuestom->obtenerImpuestos($_SESSION["establecimiento"]["id_establecimiento"]);
            $valorImpuesto = $valorTotalHospedaje * $impuesto[0]->valor / 100;
            $valorTotalHospedaje = $valorTotalHospedaje + $valorImpuesto;
            $this->reservam->actulizarImpuesto($valorImpuesto, $idReserva);
        }
        $this->reservam->actualizarTotalPagar($valorTotalHospedaje, $idReserva);
    }

    private function diferenciaFechas($desde, $hasta) {
        $datetime1 = date_create($desde);
        $datetime2 = date_create($hasta);
        $intervalo = date_diff($datetime1, $datetime2);
        return $intervalo->days;
    }

    private function obtenerPrecio($idTemporada, $idCategoria, $cantidadPersonas, $hoy) {
        $capacidadEstandar = $this->categoriam->obtenerDatos("capacidad_estandar", "where id_categoria='$idCategoria'");
        $capacidadEstandar = $capacidadEstandar[0]->capacidad_estandar;
        $valor = 0;
        $tarifas = $this->categoria_x_temporadam->obtenerDatos("tarifa_persona_adicional,incremento_viernes,incremento_sabado,incremento_domingo ", "where id_temporada='$idTemporada' AND id_categoria='$idCategoria'");
        if ($capacidadEstandar < $cantidadPersonas) {//Hay sobrecupo
            $tarifaPersonaAdicional = $tarifas[0]->tarifa_persona_adicional;
            $sobreCupo = $cantidadPersonas - $capacidadEstandar;
            $valor = $valor + $sobreCupo * $tarifaPersonaAdicional;
            $cantidadPersonas = $capacidadEstandar;
        }


        $dia = date("w", strtotime($hoy));
        if ($dia == 5) {//Si hoy es vienes le cobro más.
            $valor = $valor + $tarifas[0]->incremento_viernes;
        } else if ($dia == 6) {//Si hoy es sábado le cobro más.
            $valor = $valor + $tarifas[0]->incremento_sabado;
        } else if ($dia == 0) {//Si hoy es domingo le cobro más.
            $valor = $valor + $tarifas[0]->incremento_domingo;
        }


        $valorAux = $this->tarifa_x_personam->obtenerDatos("valor", "where id_temporada='$idTemporada' AND id_categoria='$idCategoria' AND n_personas='$cantidadPersonas'");
        $valor = $valor + $valorAux[0]->valor;
        return $valor;
    }

    public function establecerImpuestoAlojamiento() {
        $this->load->model('impuestom');
        $this->load->model('tarifa_x_diam');
        $this->load->model('reservam');

        if (!empty($_POST["impuesto1"])) {
            $impuesto = $this->impuestom->obtenerImpuestos($_SESSION["establecimiento"]["id_establecimiento"]);
            $costoHospedajeSinImp = $this->reservam->obtenerDatos("total_alojamiento", $_POST["idReserva"]);
            $valorImpuesto = $costoHospedajeSinImp[0]->total_alojamiento * $impuesto[0]->valor / 100;
            $this->reservam->actulizarImpuesto($valorImpuesto, $_POST["idReserva"]);
        } else {
            $this->reservam->actulizarImpuesto(0, $_POST["idReserva"]);
        }
        $this->reservaM->actualizarEstatus($_POST["idReserva"]);
        $_SESSION["mensaje"]["contenido"] = "Impuesto actualizado exitosamente";
        $_SESSION["mensaje"]["tipo"] = "exito";
        header("location:reserva?id={$_POST["idReserva"]}");
    }

    public function cambiaragencia() {
        $this->escapar($_POST);
        $this->reservaM->cambiarAgencia($_POST["idReserva"], $_POST["idAgencia"]);
        $this->mensaje("Agencia o canal actualizado exitosamente", "exito", "reserva?id={$_POST["idReserva"]}");
    }

    private function verificarCantidadHuespedes($idReserva) {
        $clientesDecalarados = $this->reservaM->obtenerDatos("numero_personas", $idReserva);
        $clientesDecalarados = $clientesDecalarados[0]->numero_personas;

        $clientesRegistrados = $this->cliente_x_reservaM->contarHuespedes($idReserva);
        $clientesRegistrados = $clientesRegistrados[0]->cantidad;
        if ($clientesRegistrados >= $clientesDecalarados) {
            $_SESSION["mensaje"]["contenido"] = "Solo se han declarado $clientesDecalarados huéspedes en esta reserva";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("location:../reserva?id=$idReserva");
            exit();
        }
    }

    private function esMiPago($idPago) {
        $r = $this->ingreso_reservaM->esMiPago($idPago, $_SESSION["establecimiento"]["id_establecimiento"]);
        if ($r[0]->cantidad == 1) {
            return true;
        } else {
            return false;
        }
    }

    private function esMiAjuste($idAjuste) {
        $r = $this->ajusteM->esMiAjuste($idAjuste, $_SESSION["establecimiento"]["id_establecimiento"]);
        if ($r[0]->cantidad == 1) {
            return true;
        } else {
            return false;
        }
    }

    private function validarReservaPost() {
        $flag = false;
        if (!empty($_POST["idReserva"])) {
            $r = $this->reservaM->esMiReserva($_POST["idReserva"], $_SESSION['establecimiento']['id_establecimiento']);
            if ($r[0]->cantidad != 1) {
                $flag = true;
            }
        } else {
            $flag = true;
        }
        if ($flag) {
            $_SESSION["mensaje"]["contenido"] = " La reserva no existe.";
            $_SESSION["mensaje"]["tipo"] = "advertencia";
            header("Location:calendario");
            exit();
        }
    }

    public function cambiarestadoconfprov() {
        if ($_POST["inputConfProv"] == 1) {
            $this->reservaM->setConfirmada($_POST["idReserva"]);
        } else {
            $this->reservaM->setProvisional($_POST["idReserva"]);
        }
        $this->mensaje("Estado cambiado exitosamente", "exito", "reserva?id={$_POST["idReserva"]}");
    }

}
